package com.hzit.hzb.sms.service.impl;



import cn.hutool.core.lang.hash.Hash;
import cn.hutool.core.util.RandomUtil;
import cn.hutool.json.JSON;
import cn.hutool.json.JSONUtil;
import com.aliyun.dysmsapi20170525.Client;
import com.aliyun.dysmsapi20170525.models.SendSmsRequest;
import com.aliyun.dysmsapi20170525.models.SendSmsResponse;
import com.aliyun.teaopenapi.models.Config;
import com.hzit.hzb.sms.Properties.SmsProperties;
import com.hzit.hzb.sms.service.SmsService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;

import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.TimeUnit;

/**
 * 类名：
 * 作者：WF
 * 功能：
 */
@Service
public class SmsServiceImpl implements SmsService {

	@Autowired
	private RedisTemplate redisTemplate;

	//1. 发送验证码并存到redis中
	@Override
	public void send(String mobile) throws Exception {
		// 1.1 创建发送手机的客户端对象
		Config config = new Config()
				// 配置 AccessKey ID
				.setAccessKeyId(SmsProperties.KEY_ID)
				// 配置 AccessKey Secret
				.setAccessKeySecret(SmsProperties.KEY_SECRET);

		// 配置 Endpoint
		config.endpoint = SmsProperties.END_POINT;
		// 创建发送请求的客户端对象
		Client client = new Client(config);

		// 1.2 生成手机验证码
		String code = RandomUtil.randomNumbers(4);
		Map<String,String> map = new HashMap<>();
		map.put("code",code);

		// 1.3 将验证码存到redis中
		redisTemplate.opsForValue().set("hzb:sms:code:" + mobile,code,5, TimeUnit.HOURS);

		// 1.4 开始发送手机验证码
		// 构造请求对象，请填入请求参数值
		SendSmsRequest sendSmsRequest = new SendSmsRequest()
				.setPhoneNumbers(mobile)
				.setSignName(SmsProperties.SIGN_NAME)
				.setTemplateCode(SmsProperties.TEMPLATE_CODE)
				.setTemplateParam(JSONUtil.toJsonStr(map));
		// 获取响应对象
		SendSmsResponse sendSmsResponse = client.sendSms(sendSmsRequest);

		// 响应包含服务端响应的 body 和 headers
		System.out.println(JSONUtil.toJsonStr(sendSmsResponse));
	}
}
